-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
13-6 [BE] [논문 상세 - 논문 정보] Request batch 작업 #82
Conversation
사용자가 "paper batch queue" 와 같이 사용하고 있는 keyword로 검색시 바뀌지 말아야할 값이 바뀌는 것을 방지한다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굉장히 많은 양의 코드를 작성하시느라 수고하셨습니다.
로컬에서는 잘 돌아가는 것 같지만, 저희 개발 서버로 올라갔을 때는 어떻게 될지 지속적인 모니터링이 필요할 것같습니다.
export const SEARCH_BATCH_SIZE = 10; | ||
export const DOI_BATCH_SIZE = 40; | ||
export const DOI_REGEXP = new RegExp(/^[\d]{2}\.[\d]{1,}\/.*/); | ||
export const ALLOW_UPDATE = process.env.ALLOW_UPDATE ? (eval(process.env.ALLOW_UPDATE) as boolean) : false; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Time_INTERVAL 이나, MAX_DEPTH같이 추후에 변동이 될 수 있는 요소들을 변수로 관리를 할 수 있게 하는 부분이 참 좋은 것 같습니다.
@@ -0,0 +1,20 @@ | |||
import Redis from 'ioredis'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Redis를 이용한 queue 군요 redis 자체를 큐로 관리하는 것은 생각 못해봤습니다.
this.queue.push(`${retries}:${depth}:${page}:${url}`, pushLeft); | ||
} | ||
async batchLog(queue: RedisQueue, batched: string[]) { | ||
const urlQueueSize = await queue.size(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
queue가 redis 기반이다 보니 queue의 사이즈를 알아야 할때도 redis에 접근을 해야 하군요.
이러한 점은 단점이 될 수도 있겠네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
복잡한 작업인데 테스트까지 꼼꼼하게 잘 작성해 주셨네요. 👍
계속해서 배치 작업을 진행하면 서버 부하가 얼마나 발생할지가 궁금한데, 배포 후 테스트 해보면 좋을 것 같습니다.
개요
작업사항
Batch
service가 추가되었습니다.SearchBatcher
와DoiBatcher
는Batcher
라는 abstract class 를 상속합니다.Batcher
에서는 Redis의 list를 queue로 사용합니다.SearchBatcher
는 키워드로 검색하기 위한 url을 queue에 담으며, 한번의 요청당 최대 1,000*SEARCH_BATCH_SIZE
개의 논문정보를 가져옵니다.DoiBatcher
는 doi로 검색하기 위한 url을 queue에 담으며, 한번의 요청당 최대 1 *DOI_BATCH_SIZE
개의 논문 정보를 가져옵니다.MAX_RETRY
만큼 시도할 때까지 큐의 맨 뒤로 담습니다.SEARCH_BATCH_SIZE
혹은DOI_BATCH_SIZE
보다 많은 검색요청이 들어오는 경우, 사용자에 의해 먼저보내진 요청요청이 나중에 오게될 수도 있습니다. (이 부분까지는 오버엔지니어링으로 생각했습니다.)process.env.ALLOW_UPDATE
는 default가 false이고, elasticsearch에 doi가 이미 존재하면 update(덮어쓰기)하지 않습니다.이후 작업이 필요한 내용
리뷰 요청사항